client server pattern